Exercise 2 - Sam Eadie - CSMRI

Unfortunately, no one can be told what the Matrix is. You have to see it for yourself.

Question 1: State rigorously and prove the “Fourier Slice Theorem”. Give its interpretation and explain its connection with MRI

For an object function $f(x,y)$, the Radon transform $Rf(x,y)=p(\theta,t)$ is the line integral over $f$ on all points parameterised by the line $L(\theta, t) = x\cos{\theta} + y\sin{\theta} = t, \forall \theta \in [0, 2\pi)$. Define a predictor function $p_{\theta}(t)$ as the Radon Transform evaluated at a single angle $\theta$ (i.e. a single projection of the object function onto a line).

The Fourier Slice Theorem states that the Fourier transform of the predictor function, $P_{\theta}(\omega)$, is equal to the Fourier Transform of the object function evaluated along a line through the origin at an angle corresponding to the predictor, $F(\omega\cos{\theta}, \omega\sin{\theta})$.

This theorem is useful in MRI image reconstruction where all radio signals from a slice, during the post-excitation precession, are projected onto a line at the receiver.

Proof

The Fourier Transform of the object function is, by definition: $$F(k_x, k_y) = \int_{-\infty}^{\infty}\int_{-\infty}^{\infty}f(x,y)e^{-j2\pi(k_xx+k_yy)}dxdy$$

The Fourier Transform of the predictor function is, by definition: $$P_{\theta}(\omega) = \int_{-\infty}^{\infty}p_{\theta}(t)e^{-j2\pi\omega t}dt$$

Using the Radon Transform, the predictor can be defined in terms of the object function: $$p_{\theta}(t) = \mathbb{R}f(\theta,t) = \int_{L(\theta,t)}f(x,y)ds$$

Where the line integral is over: $$L(\theta,t) = {(x,y) \in \mathbb{R} \times \mathbb{R}\colon x\cos{\theta} + y\sin{\theta}} = t$$

Substituting this representation into the Fourier Transform of the predictor function gives: $$P_{\theta}(\omega) = \int_{-\infty}^{\infty} \int_{L(\theta,t)}f(x,y)ds \cdot e^{-j2\pi\omega t}dt$$

This can be factored into a double integral by expressing the line integral in the $(x,y)$ space: $$P_{\theta}(\omega) = \int_{-\infty}^{\infty}\int_{-\infty}^{\infty} f(x,y)e^{-j2\pi\omega(x\cos{\theta} + y\sin{\theta})}dxdy$$

Comparison with the Fourier Transform of the object function gives: $$P_{\theta}(\omega) = F(\omega\cos{\theta}, \omega\sin{\theta})$$

Question 2: Write, in Julia, a software that simulates the reconstruction from “Standard sequential Cartesian filling of k-space with left-to-right frequency-encoding”, “Centric ordering of k-space acquisition” and the “Outward radial ordering of k-space” from http://mriquestions.com/k-space-trajectories.html

In [1]:
using Images, Plots, ImageView, FFTW
Gtk-Message: 10:57:12.595: Failed to load module "unity-gtk-module"

(julia:2484): Gtk-WARNING **: 10:57:12.628: Theme parsing error: gtk-widgets-borders.css:31:18: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.628: Theme parsing error: gtk-widgets-borders.css:35:18: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.629: Theme parsing error: gtk-widgets-borders.css:90:46: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.629: Theme parsing error: gtk-widgets-borders.css:94:46: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.629: Theme parsing error: gtk-widgets-borders.css:103:69: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.629: Theme parsing error: gtk-widgets-borders.css:105:69: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.629: Theme parsing error: gtk-widgets-borders.css:107:64: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.629: Theme parsing error: gtk-widgets-borders.css:196:28: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.629: Theme parsing error: gtk-widgets-borders.css:197:35: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.630: Theme parsing error: gtk-widgets-borders.css:211:28: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.630: Theme parsing error: gtk-widgets-borders.css:217:35: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.630: Theme parsing error: gtk-widgets-borders.css:225:25: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.630: Theme parsing error: gtk-widgets-borders.css:237:34: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.630: Theme parsing error: gtk-widgets-borders.css:249:40: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.630: Theme parsing error: gtk-widgets-borders.css:261:51: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.631: Theme parsing error: gtk-widgets-assets.css:35:18: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.631: Theme parsing error: gtk-widgets-assets.css:39:22: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.631: Theme parsing error: gtk-widgets-assets.css:43:22: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.631: Theme parsing error: gtk-widgets-assets.css:44:31: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.631: Theme parsing error: gtk-widgets-assets.css:45:37: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.631: Theme parsing error: gtk-widgets-assets.css:68:18: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.631: Theme parsing error: gtk-widgets-assets.css:72:31: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.631: Theme parsing error: gtk-widgets-assets.css:96:26: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.631: Theme parsing error: gtk-widgets-assets.css:100:30: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.631: Theme parsing error: gtk-widgets-assets.css:101:39: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.631: Theme parsing error: gtk-widgets-assets.css:102:45: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.631: Theme parsing error: gtk-widgets-assets.css:124:26: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.631: Theme parsing error: gtk-widgets-assets.css:128:39: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.631: Theme parsing error: gtk-widgets-assets.css:132:19: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.631: Theme parsing error: gtk-widgets-assets.css:136:19: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.631: Theme parsing error: gtk-widgets-assets.css:140:23: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.631: Theme parsing error: gtk-widgets-assets.css:141:32: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.631: Theme parsing error: gtk-widgets-assets.css:142:38: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.631: Theme parsing error: gtk-widgets-assets.css:146:23: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.631: Theme parsing error: gtk-widgets-assets.css:147:32: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.631: Theme parsing error: gtk-widgets-assets.css:148:38: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:152:19: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:152:31: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:156:23: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:156:35: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:157:32: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:157:44: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:158:38: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:158:50: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:162:19: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:166:19: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:170:23: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:171:32: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:175:23: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:176:32: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:180:19: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:180:31: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:184:32: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:184:44: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:208:18: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:212:22: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:216:22: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:217:31: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:218:37: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:240:18: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:244:31: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:268:26: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:272:22: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:273:39: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:274:45: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:296:26: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:300:39: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:304:19: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:308:19: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:312:23: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:313:32: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:314:38: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:318:23: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:319:32: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.632: Theme parsing error: gtk-widgets-assets.css:320:38: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:324:19: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:324:31: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:328:23: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:328:35: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:329:32: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:329:44: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:330:38: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:330:50: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:334:19: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:338:19: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:342:23: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:343:32: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:347:23: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:348:32: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:352:19: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:352:31: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:356:32: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:356:44: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:383:49: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:384:49: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:385:44: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:386:47: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:387:32: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:388:38: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:401:49: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:402:49: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:403:44: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:404:47: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:405:32: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:406:38: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:422:41: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:430:41: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:452:21: The :focused pseudo-class is deprecated. Use :focus instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:453:32: The :focused pseudo-class is deprecated. Use :focus instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:457:27: The :focused pseudo-class is deprecated. Use :focus instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:458:38: The :focused pseudo-class is deprecated. Use :focus instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:462:25: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:463:36: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:467:25: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:468:36: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:484:30: The :focused pseudo-class is deprecated. Use :focus instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:488:36: The :focused pseudo-class is deprecated. Use :focus instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:492:34: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.633: Theme parsing error: gtk-widgets-assets.css:496:34: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.634: Theme parsing error: gtk-widgets.css:16:33: The style property GtkMenu:horizontal-padding is deprecated and shouldn't be used anymore. It will be removed in a future version

(julia:2484): Gtk-WARNING **: 10:57:12.634: Theme parsing error: gtk-widgets.css:17:31: The style property GtkMenu:vertical-padding is deprecated and shouldn't be used anymore. It will be removed in a future version

(julia:2484): Gtk-WARNING **: 10:57:12.634: Theme parsing error: gtk-widgets.css:19:32: The style property GtkMenuItem:arrow-scaling is deprecated and shouldn't be used anymore. It will be removed in a future version

(julia:2484): Gtk-WARNING **: 10:57:12.634: Theme parsing error: gtk-widgets.css:20:30: The style property GtkNotebook:tab-overlap is deprecated and shouldn't be used anymore. It will be removed in a future version

(julia:2484): Gtk-WARNING **: 10:57:12.634: Theme parsing error: gtk-widgets.css:40:32: The style property GtkWidget:separator-width is deprecated and shouldn't be used anymore. It will be removed in a future version

(julia:2484): Gtk-WARNING **: 10:57:12.634: Theme parsing error: gtk-widgets.css:41:33: The style property GtkWidget:separator-height is deprecated and shouldn't be used anymore. It will be removed in a future version

(julia:2484): Gtk-WARNING **: 10:57:12.634: Theme parsing error: gtk-widgets.css:42:32: The style property GtkWidget:wide-separators is deprecated and shouldn't be used anymore. It will be removed in a future version

(julia:2484): Gtk-WARNING **: 10:57:12.634: Theme parsing error: gtk-widgets.css:43:27: The style property GtkWidget:link-color is deprecated and shouldn't be used anymore. It will be removed in a future version

(julia:2484): Gtk-WARNING **: 10:57:12.634: Theme parsing error: gtk-widgets.css:44:35: The style property GtkWidget:visited-link-color is deprecated and shouldn't be used anymore. It will be removed in a future version

(julia:2484): Gtk-WARNING **: 10:57:12.634: Theme parsing error: gtk-widgets.css:126:19: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.635: Theme parsing error: gtk-widgets.css:134:19: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.635: Theme parsing error: gtk-widgets.css:141:24: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.635: Theme parsing error: gtk-widgets.css:142:24: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.635: Theme parsing error: gtk-widgets.css:169:26: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.635: Theme parsing error: gtk-widgets.css:184:27: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.635: Theme parsing error: gtk-widgets.css:258:44: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.635: Theme parsing error: gtk-widgets.css:259:39: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.635: Theme parsing error: gtk-widgets.css:391:27: The :prelight pseudo-class is deprecated. Use :hover instead.

(julia:2484): Gtk-WARNING **: 10:57:12.635: Theme parsing error: gtk-widgets.css:402:30: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.635: Theme parsing error: gtk-widgets.css:442:23: The :focused pseudo-class is deprecated. Use :focus instead.

(julia:2484): Gtk-WARNING **: 10:57:12.635: Theme parsing error: gtk-widgets.css:446:18: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.635: Theme parsing error: gtk-widgets.css:458:18: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.635: Theme parsing error: gtk-widgets.css:528:38: The :focused pseudo-class is deprecated. Use :focus instead.

(julia:2484): Gtk-WARNING **: 10:57:12.636: Theme parsing error: gtk-widgets.css:684:32: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.636: Theme parsing error: gtk-widgets.css:685:24: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.636: Theme parsing error: gtk-widgets.css:696:10: not a number

(julia:2484): Gtk-WARNING **: 10:57:12.636: Theme parsing error: gtk-widgets.css:696:24: Using Pango syntax for the font: style property is deprecated; please use CSS syntax

(julia:2484): Gtk-WARNING **: 10:57:12.636: Theme parsing error: gtk-widgets.css:739:37: The style property GtkMenuItem:horizontal-padding is deprecated and shouldn't be used anymore. It will be removed in a future version

(julia:2484): Gtk-WARNING **: 10:57:12.636: Theme parsing error: gtk-widgets.css:786:38: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.636: Theme parsing error: gtk-widgets.css:787:40: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.636: Theme parsing error: gtk-widgets.css:788:48: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.636: Theme parsing error: gtk-widgets.css:789:50: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.636: Theme parsing error: gtk-widgets.css:790:44: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.636: Theme parsing error: gtk-widgets.css:791:46: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.636: Theme parsing error: gtk-widgets.css:792:52: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.636: Theme parsing error: gtk-widgets.css:793:54: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.636: Theme parsing error: gtk-widgets.css:794:47: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.636: Theme parsing error: gtk-widgets.css:795:49: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.636: Theme parsing error: gtk-widgets.css:796:21: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.636: Theme parsing error: gtk-widgets.css:797:23: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.636: Theme parsing error: gtk-widgets.css:802:36: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.636: Theme parsing error: gtk-widgets.css:803:38: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.636: Theme parsing error: gtk-widgets.css:804:39: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.636: Theme parsing error: gtk-widgets.css:805:41: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.636: Theme parsing error: gtk-widgets.css:829:34: The :inconsistent pseudo-class is deprecated. Use :indeterminate instead.

(julia:2484): Gtk-WARNING **: 10:57:12.636: Theme parsing error: gtk-widgets.css:866:34: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.636: Theme parsing error: gtk-widgets.css:986:33: The :focused pseudo-class is deprecated. Use :focus instead.

(julia:2484): Gtk-WARNING **: 10:57:12.636: Theme parsing error: gtk-widgets.css:1008:33: The :focused pseudo-class is deprecated. Use :focus instead.

(julia:2484): Gtk-WARNING **: 10:57:12.637: Theme parsing error: gtk-widgets.css:1025:33: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.637: Theme parsing error: gtk-widgets.css:1031:35: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.637: Theme parsing error: gtk-widgets.css:1041:28: The :focused pseudo-class is deprecated. Use :focus instead.

(julia:2484): Gtk-WARNING **: 10:57:12.637: Theme parsing error: gtk-widgets.css:1148:35: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.637: Theme parsing error: gtk-widgets.css:1313:32: The style property GtkWidget:wide-separators is deprecated and shouldn't be used anymore. It will be removed in a future version

(julia:2484): Gtk-WARNING **: 10:57:12.637: Theme parsing error: gtk-widgets.css:1325:30: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.637: Theme parsing error: gtk-widgets.css:1326:29: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.637: Theme parsing error: gtk-widgets.css:1333:37: The style property GtkMenuItem:horizontal-padding is deprecated and shouldn't be used anymore. It will be removed in a future version

(julia:2484): Gtk-WARNING **: 10:57:12.637: Theme parsing error: gtk-widgets.css:1396:30: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.637: Theme parsing error: gtk-widgets.css:1402:30: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.637: Theme parsing error: gtk-widgets.css:1405:30: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.637: Theme parsing error: gtk-widgets.css:1429:30: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.637: Theme parsing error: gtk-widgets.css:1430:30: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.638: Theme parsing error: gtk-widgets.css:1463:27: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.638: Theme parsing error: gtk-widgets.css:1505:18: The 'outline-radius' property has been renamed to '-gtk-outline-radius'

(julia:2484): Gtk-WARNING **: 10:57:12.638: Theme parsing error: gtk-widgets.css:1510:28: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.639: Theme parsing error: gtk-widgets.css:1578:14: not a number

(julia:2484): Gtk-WARNING **: 10:57:12.639: Theme parsing error: gtk-widgets.css:1578:14: Expected a string.

(julia:2484): Gtk-WARNING **: 10:57:12.639: Theme parsing error: gtk-widgets.css:1607:15: The 'icon-shadow' property has been renamed to '-gtk-icon-shadow'

(julia:2484): Gtk-WARNING **: 10:57:12.639: Theme parsing error: gtk-widgets.css:1616:15: The 'icon-shadow' property has been renamed to '-gtk-icon-shadow'

(julia:2484): Gtk-WARNING **: 10:57:12.639: Theme parsing error: gtk-widgets.css:1630:15: The 'icon-shadow' property has been renamed to '-gtk-icon-shadow'

(julia:2484): Gtk-WARNING **: 10:57:12.639: Theme parsing error: gtk-widgets.css:1640:15: The 'icon-shadow' property has been renamed to '-gtk-icon-shadow'

(julia:2484): Gtk-WARNING **: 10:57:12.639: Theme parsing error: gtk-widgets.css:1699:29: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.639: Theme parsing error: gtk-widgets.css:1700:24: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.639: Theme parsing error: gtk-widgets.css:1719:32: The :focused pseudo-class is deprecated. Use :focus instead.

(julia:2484): Gtk-WARNING **: 10:57:12.639: Theme parsing error: gtk-widgets.css:1720:27: The :focused pseudo-class is deprecated. Use :focus instead.

(julia:2484): Gtk-WARNING **: 10:57:12.639: Theme parsing error: gtk-widgets.css:1731:39: The :focused pseudo-class is deprecated. Use :focus instead.

(julia:2484): Gtk-WARNING **: 10:57:12.639: Theme parsing error: gtk-widgets.css:1732:40: The :focused pseudo-class is deprecated. Use :focus instead.

(julia:2484): Gtk-WARNING **: 10:57:12.639: Theme parsing error: gtk-widgets.css:1733:34: The :focused pseudo-class is deprecated. Use :focus instead.

(julia:2484): Gtk-WARNING **: 10:57:12.639: Theme parsing error: gtk-widgets.css:1734:35: The :focused pseudo-class is deprecated. Use :focus instead.

(julia:2484): Gtk-WARNING **: 10:57:12.639: Theme parsing error: gtk-widgets.css:1774:44: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.639: Theme parsing error: gtk-widgets.css:1775:36: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.639: Theme parsing error: gtk-widgets.css:1776:39: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.639: Theme parsing error: gtk-widgets.css:1777:31: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.639: Theme parsing error: gtk-widgets.css:1781:36: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.639: Theme parsing error: gtk-widgets.css:1782:31: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.640: Theme parsing error: gtk-widgets.css:1788:41: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.640: Theme parsing error: gtk-widgets.css:1792:44: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.640: Theme parsing error: gtk-widgets.css:1793:39: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.640: Theme parsing error: gtk-widgets.css:1801:39: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.640: Theme parsing error: gtk-widgets.css:1804:34: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.641: Theme parsing error: gtk-widgets.css:1833:15: The 'icon-shadow' property has been renamed to '-gtk-icon-shadow'

(julia:2484): Gtk-WARNING **: 10:57:12.641: Theme parsing error: gtk-widgets.css:1841:43: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.642: Theme parsing error: gtk-widgets.css:1843:52: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.642: Theme parsing error: gtk-widgets.css:1848:57: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.642: Theme parsing error: gtk-widgets.css:1850:66: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.642: Theme parsing error: gtk-widgets.css:1862:43: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.642: Theme parsing error: gtk-widgets.css:1864:52: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.642: Theme parsing error: gtk-widgets.css:1869:69: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.643: Theme parsing error: gtk-widgets.css:1871:78: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.643: Theme parsing error: gtk-widgets.css:1885:43: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.643: Theme parsing error: gtk-widgets.css:1887:52: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.643: Theme parsing error: gtk-widgets.css:1892:68: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.643: Theme parsing error: gtk-widgets.css:1894:77: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.643: Theme parsing error: gtk-widgets.css:1908:43: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.643: Theme parsing error: gtk-widgets.css:1910:52: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.643: Theme parsing error: gtk-widgets.css:1915:68: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.643: Theme parsing error: gtk-widgets.css:1917:77: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.644: Theme parsing error: gtk-widgets.css:2004:30: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.644: Theme parsing error: gtk-widgets.css:2028:30: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.644: Theme parsing error: gtk-widgets.css:2029:32: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.644: Theme parsing error: gtk-widgets.css:2080:15: The 'icon-shadow' property has been renamed to '-gtk-icon-shadow'

(julia:2484): Gtk-WARNING **: 10:57:12.644: Theme parsing error: gtk-widgets.css:2086:15: The 'icon-shadow' property has been renamed to '-gtk-icon-shadow'

(julia:2484): Gtk-WARNING **: 10:57:12.644: Theme parsing error: gtk-widgets.css:2118:13: The :insensitive pseudo-class is deprecated. Use :disabled instead.

(julia:2484): Gtk-WARNING **: 10:57:12.644: Theme parsing error: gtk-widgets.css:2121:21: The '-gtk-image-effect' property has been renamed to '-gtk-icon-effect'

(julia:2484): Gtk-WARNING **: 10:57:12.644: Theme parsing error: gtk-widgets.css:2125:18: The :focused pseudo-class is deprecated. Use :focus instead.

(julia:2484): Gtk-WARNING **: 10:57:12.644: Theme parsing error: gtk-widgets.css:2132:18: The :focused pseudo-class is deprecated. Use :focus instead.

(julia:2484): Gtk-WARNING **: 10:57:12.645: Theme parsing error: unity.css:109:15: The 'icon-shadow' property has been renamed to '-gtk-icon-shadow'

(julia:2484): Gtk-WARNING **: 10:57:12.646: Theme parsing error: gedit.css:65:67: The :prelight pseudo-class is deprecated. Use :hover instead.

(julia:2484): Gtk-WARNING **: 10:57:12.646: Theme parsing error: gedit.css:102:15: The 'icon-shadow' property has been renamed to '-gtk-icon-shadow'

(julia:2484): Gtk-WARNING **: 10:57:12.646: Theme parsing error: gedit.css:148:42: The :prelight pseudo-class is deprecated. Use :hover instead.

(julia:2484): Gtk-WARNING **: 10:57:12.646: Theme parsing error: gedit.css:152:68: The :prelight pseudo-class is deprecated. Use :hover instead.

(julia:2484): Gtk-WARNING **: 10:57:12.646: Theme parsing error: gedit.css:156:51: The :prelight pseudo-class is deprecated. Use :hover instead.

(julia:2484): Gtk-WARNING **: 10:57:12.646: Theme parsing error: gedit.css:163:77: The :prelight pseudo-class is deprecated. Use :hover instead.

(julia:2484): Gtk-WARNING **: 10:57:12.647: Theme parsing error: nautilus.css:29:47: The :prelight pseudo-class is deprecated. Use :hover instead.

(julia:2484): Gtk-WARNING **: 10:57:12.647: Theme parsing error: nautilus.css:40:16: The 'outline-radius' property has been renamed to '-gtk-outline-radius'

(julia:2484): Gtk-WARNING **: 10:57:12.647: Theme parsing error: nautilus.css:50:71: Using one color stop with linear-gradient() is deprecated.

(julia:2484): Gtk-WARNING **: 10:57:12.647: Theme parsing error: nautilus.css:51:71: Using one color stop with linear-gradient() is deprecated.

(julia:2484): Gtk-WARNING **: 10:57:12.648: Theme parsing error: gnome-panel.css:71:35: The :prelight pseudo-class is deprecated. Use :hover instead.

(julia:2484): Gtk-WARNING **: 10:57:12.648: Theme parsing error: gnome-panel.css:72:35: The :prelight pseudo-class is deprecated. Use :hover instead.

(julia:2484): Gtk-WARNING **: 10:57:12.648: Theme parsing error: gnome-panel.css:82:28: The :prelight pseudo-class is deprecated. Use :hover instead.

(julia:2484): Gtk-WARNING **: 10:57:12.648: Theme parsing error: gnome-panel.css:83:28: The :prelight pseudo-class is deprecated. Use :hover instead.

(julia:2484): Gtk-WARNING **: 10:57:12.648: Theme parsing error: gnome-panel.css:98:36: The :prelight pseudo-class is deprecated. Use :hover instead.

(julia:2484): Gtk-WARNING **: 10:57:12.648: Theme parsing error: gnome-panel.css:104:36: The :prelight pseudo-class is deprecated. Use :hover instead.

(julia:2484): Gtk-WARNING **: 10:57:12.649: Theme parsing error: unity-greeter.css:49:30: The :focused pseudo-class is deprecated. Use :focus instead.

(julia:2484): Gtk-WARNING **: 10:57:12.649: Theme parsing error: unity-greeter.css:53:29: The :focused pseudo-class is deprecated. Use :focus instead.

(julia:2484): Gtk-WARNING **: 10:57:12.649: Theme parsing error: unity-greeter.css:58:23: The :focused pseudo-class is deprecated. Use :focus instead.

(julia:2484): Gtk-WARNING **: 10:57:12.649: Theme parsing error: unity-greeter.css:59:22: The :focused pseudo-class is deprecated. Use :focus instead.

(julia:2484): Gtk-WARNING **: 10:57:12.649: Theme parsing error: calendar.css:9:18: The 'outline-radius' property has been renamed to '-gtk-outline-radius'
Gtk-Message: 10:57:12.656: Failed to load module "canberra-gtk-module"
Gtk-Message: 10:57:12.657: Failed to load module "canberra-gtk-module"

Load full kspace

In [2]:
# Load brain MRI
mri = load("mri_small.png")
mri = convert(Array{Float64}, Gray.(mri))
mri_view = heatmap(reverse(abs.(mri),dims=1), c=:viridis)

# Plot the fourier transform, again, on a log scale for visibility 
mri_fft = fftshift(fft(mri))
fft_view = heatmap(reverse(log.(abs.(mri_fft).+1.1),dims=1), c=:viridis)

plot(mri_view, fft_view, layout = (1, 2), legend = false, size=(1000, 400))
Out[2]:

Standard sequential Cartesian filling of k-space with left-to-right frequency-encoding

In [3]:
kspace = zeros(Complex{Float64}, size(mri_fft))
reconstruction = zeros(Float64, size(mri_fft))

cartesian_animation = @animate for i in 1:size(kspace,2)
    kspace[:,i] = mri_fft[:,i]
    reconstruction = ifft(ifftshift(kspace))
    
    kspace_view = heatmap(reverse(log.(abs.(kspace).+1.1),dims=1), c=:viridis)
    reconstruction_view = heatmap(reverse(abs.(reconstruction),dims=1), c=:viridis)
    plot(kspace_view, reconstruction_view, layout = (1, 2), legend = false, size=(1000, 400))
    end every 5

gif(cartesian_animation, "cartesian_animation.gif", fps = 5)
┌ Info: Saved animation to 
│   fn = /home/sam/Documents/UniversityWork/CompressiveSensingForMagneticResonanceImaging/notebooks/exercise2/cartesian_animation.gif
â”” @ Plots /home/sam/.julia/packages/Plots/8GUYs/src/animation.jl:102
Out[3]:

Centric ordering of k-space acquisition

In [4]:
kspace = zeros(Complex{Float64}, size(mri_fft))
reconstruction = zeros(Float64, size(mri_fft))

centric_animation = @animate for i in 1:convert(UInt16, size(kspace,1)/2)
    ii = 1 - i + convert(UInt16, size(kspace,1)/2)
    jj = i + convert(UInt16, size(kspace,1)/2)
    kspace[ii,:] = mri_fft[ii,:]
    kspace[jj,:] = mri_fft[jj,:]
    reconstruction = ifft(ifftshift(kspace))
    
    kspace_view = heatmap(reverse(log.(abs.(kspace).+1.1),dims=1), c=:viridis)
    reconstruction_view = heatmap(reverse(abs.(reconstruction),dims=1), c=:viridis)
    plot(kspace_view, reconstruction_view, layout = (1, 2), legend = false, size=(1000, 400))
    end every 2

gif(centric_animation, "centric_animation.gif", fps = 5)
┌ Info: Saved animation to 
│   fn = /home/sam/Documents/UniversityWork/CompressiveSensingForMagneticResonanceImaging/notebooks/exercise2/centric_animation.gif
â”” @ Plots /home/sam/.julia/packages/Plots/8GUYs/src/animation.jl:102
Out[4]:

Outward radial ordering of k-space

In [5]:
kspace = zeros(Complex{Float64}, size(mri_fft))
reconstruction = zeros(Float64, size(mri_fft))

xc = convert(UInt16, size(kspace,1)/2)
yc = convert(UInt16, size(kspace,2)/2)
isInCircle(x,y,r) = (x-xc)^2 + (y-yc)^2 < r^2


radial_animation = @animate for r in 1:convert(UInt16, round(sqrt(size(kspace,1)^2 + size(kspace,2)^2)/2))
    
    mask = [isInCircle(x,y,r) for x=1:size(kspace,1), y=1:size(kspace,2)]
    reconstruction = ifft(ifftshift(mri_fft .* mask))
    
    kspace_view = heatmap(reverse(log.(abs.(mri_fft .* mask).+1.1),dims=1), c=:viridis)
    reconstruction_view = heatmap(reverse(abs.(reconstruction),dims=1), c=:viridis)
    plot(kspace_view, reconstruction_view, layout = (1, 2), legend = false, size=(1000, 400))
    end every 2

gif(radial_animation, "radial_animation.gif", fps = 5)
GKS: Possible loss of precision in routine SET_WINDOW
GKS: Rectangle definition is invalid in routine CELLARRAY
┌ Info: Saved animation to 
│   fn = /home/sam/Documents/UniversityWork/CompressiveSensingForMagneticResonanceImaging/notebooks/exercise2/radial_animation.gif
â”” @ Plots /home/sam/.julia/packages/Plots/8GUYs/src/animation.jl:102
Out[5]:

Question 3: What is the difference between synthesis sparse models and analysis sparse models? Why the analysis sparse models are harder to analyze? Check the paper “analysis versus synthesis in signal priors” by Elad, Milanfar and Rubinstein.

Synthesis and analysis sparse models are two methods for making a signal sparse, but with different formulations. In a synthesis sparse model, the signal $x$ is represented as a sparse ($\gamma_s$) linear combination of the dictionary atoms ($D$): $$x = D\gamma_s$$ Where $D = [a_1, a_2, ..., a_L] \in \mathbb{R}^{N\times L}$ and $N \le L$.

On the other hand, in analyis sparse models, the signal $x$ is reprsented via its inner product with dictionary atoms ($\Omega$) to a sparse representation, $\gamma_a$: $$\gamma_a = \Omega x$$ Where $\Omega = [a_1, a_2, ..., a_L]^T \in \mathbb{R}^{L\times N}$ and $N \le L$.

Analysis sparse models are harder to analyze because, unlike synthesis sparse models, they do not provide an explicit description of the signal, $x$ (synthesis models explicitly describe them as a linear combination of known dicitonary atoms).

Question 4: What is the different between cartesian Fourier transform and non-cartesian Fourier transform? How to use NFFT in Julia?

The Non-Uniform Fourier Transform (NUFT) generalises the traditional Fourier Transform to non-uniform, or non-cartesian, coordinate systems. This is particularly useful in image reconstruction where k-space trajectories may not provide cartesian coordinates (e.g. ROSE). The discrete realisation of this transform, the non-uniform d-dimensional, Discrete Fourier Transform (NUDFT) is given as: $$\mathbf{X_k} = \sum_{n=0}^{\mathbf{N-1}}x_ne^{-2\pi j\mathbf{p_n}\cdot\mathbf{f_k}}$$ where $\mathbf{p_k} \in [0,1]^d$ are normalised, possibly non-uniform, sample points in d-dimensions, $\mathbf{f_n} \in [0,N_1], \times [0,N_2] \times ... \times [0,N_d]$ are d-dimensional frequencies, and $\mathbf{n}$ and $\mathbf{d}$ are d-dimensional indices.

Julia provides an implementation of the NUFFT, in the NFFT package. In the example below, a randomly sampled FFT of a signal is compared to the NFFT of the randomly sampled signal.

In [6]:
using NFFT, MRIReco, Plots, Random, Statistics
WARNING: using MRIReco.reconstruction in module Main conflicts with an existing identifier.
In [7]:
# Create random signal for demonstration
N = 256
y = rand(1,N)
Y = fft(y)

# Get indices to randomly sample 
i = rand(Bool, N) 

# Create frequencies 
f = collect(range(-0.5,stop=0.5,length=N)) # NFFT takes f in [-0.5, 0.5]

# Randomly sample
ysampled = y[i]
Ysampled = Y[i]
fsampled = f[i]

# Compute NFFT
plan = NFFTPlan(fsampled, 2)
adj = nfft_adjoint(plan, ysampled)
Ynfft = nfft(plan, adj)

# Evaluate performance
Ydiff = Ynfft .- Ysampled
Yerr = abs.(Ydiff) ./ abs.(Ysampled)
mean(Yerr) * 100
Out[7]:
3.640603914049534e8

Question 5: What is a spin echo imaging? What is a gradient echo imaging? What are the advantages and disadvantages of both?

Gradient Echo Imaging (GRE)

Gradient Echo Imaging applies changes to the gradient following the initial excitation with an RF pulse. Initially, a dephasing gradient is applied to accelerate the dephasing. This process is then reversed by applying an opposite polarity but equal magnitude rephasing gradient, hence creating the eponymous echo. Neither of these gradient changes affect the normal dephasing from T2 processes, and therefore the GRE signal is enveloped by the natural free induction decay.

Spin Echo Imaging (SE)

Spin Echo Imaging emits two consecutive RF pulses, usually a $90^o$ pulse then a $180^o$ pulse. The first $90^o$ pulse is conventional: it shifts the net magnetisation into the transverse plane. After some time, the faster precessing spins have accumulated a relative phase difference ahead of the slower precessing spins. The second, $180^o$ RF pulse flips the phase of all spins. Now, the faster precessing spins are behind in phase and as they catch up, the net magnetisation rephases, peaks, and dephases again. Therefore, the echo is both the mirror image and a copy of the FID.

Comparison

Gradient Echo Imaging can acquire signals more rapidly than Spin Echo Imaging because it emits only 1 RF pulse (echo time can be shorter). Furthermore, if GRE sequences use low-flip-angle excitations, which is possible, short repetition times can be used, further speeding up the imaging process.

On the other hand, GRE has poor image contrast in scanners with low magnetic field homogeneity. Because the gradient reversal only counteracts the dephasing caused by the initial gradient, and not from T2 processes, image contrast is determined by other disturbances, instead of true T2-relaxation, like magnetic field inhomogeneities, static tissue susceptibility gradients and chemical shifts. These disturbances affect SE less.